#include<iostream>
#include<unistd.h>
#include<signal.h>
#include<vector>
#include<functional>//包装器
#include<sys/wait.h>

// using func_t = std::function<void()>;

// int gcount;

// std::vector<func_t> gfuncs;
// int m=5;

// void handle(int signum)
// {
//     // std::cout<<"count: "<<gcount<<std::endl;
//     // exit(0);
//     for(auto& f:gfuncs)
//     {
//         f();
//     }
//     std::cout << "gcount : " << gcount << std::endl;
//     int n;
//     if(m!=0)
//     {
//         n = alarm(1); // 重设闹钟，会返回上⼀次闹钟的剩余时间
//     }
//     else
//     {
//         n = alarm(0);
//         exit(0);
//     }
    
//     std::cout << "剩余时间 : " << n << std::endl;
// }

// void Push()
// {
//     gfuncs.push_back([](){std::cout<<"我是一个内核的刷新操作"<<std::endl;});
//     gfuncs.push_back([](){std::cout<<"我是⼀个检测进程时间片的操作，如果时间⽚到了，我会切换进程"<<std::endl;});
//     gfuncs.push_back([](){std::cout<<"我是⼀个内存管理操作，定期清理操作系统内部的内存碎片"<<std::endl;});
// }

// int main()
// {
//     Push();//装方法
//     signal(SIGALRM,handle);//自定义捕捉
//     alarm(1);//一秒的闹钟


//     while (true)
//     {
//         pause();//这里的函数是接收信号的
//         std::cout << "我醒来了..." << std::endl;
//         gcount++;
//         m--;
//     }
    
//     return 0;
// }

// int main()
// {
//     int n=fork();
//     if(n==0)
//     {
//         //子进程
//         sleep(1);
//         int a = 10;
//         a /= 0;
//         exit(0);
//     }
//     int status=0;
//     waitpid(-1,&status,0);
//     printf("exit code: %d, exit signal: %d, core dump: %d\n", (status>>8)&0xFF,status&0x7F, (status>>7)&1);
    
//     return 0;
// }

// int main()
// {
//     printf("hello Linux\n");
//     printf("hello Linux\n");
//     printf("hello Linux\n");
//     printf("hello Linux\n");
//     printf("hello Linux\n");
//     printf("hello Linux\n");
//     printf("hello Linux\n");
//     printf("hello Linux\n");
//     int a=10;
//     a/=0;
//     printf("hello Linux\n");
//     printf("hello Linux\n");
//     printf("hello Linux\n");
//     printf("hello Linux\n");
//     printf("hello Linux\n");
//     printf("hello Linux\n");
    

//     return 0;
// }

void handle(int sig)
{
    std::cout<<"这是一个信号："<<sig<<std::endl;
    signal(2,SIG_DFL);
    std::cout<<"恢复处理动作"<<std::endl;
}

int main()
{
    signal(2,handle);
    sigset_t s;
    while(true)
    {
        std::cout<<"."<<std::endl;
        sleep(1);
    }
    return 0;
}